#include<stdio.h>
int map[10][10];
int L[10],n,ans;
int Rd[20],Zd[20];
void dfs(int row,int count)
{     int i,j;
	if(count==n)
	{
		ans++;
		return;
	}
	for(i=row;i<n;i++)
	for(j=0;j<n;j++)
	{
		if(L[j]==0&&Zd[j+i]==0&&Rd[j-i+10]==0)
		{
			L[j]=1;
			Zd[i+j]=1;
			Rd[j-i+10]=1;
			dfs(i+1,count+1);
				L[j]=0;
				Zd[i+j]=0;
				Rd[j-i+10]=0;
		}
	}
	return;
}
main()
{  
	while(scanf("%d",&n),n)
	{ans=0;
	
	if(n==0)break;
	dfs(0,0);
	printf("%d\n",ans);
}
}
